package leetcode_core.leetcode_6;

import org.junit.Test;

/**
 * 功能描述
 *
 * @author: 张庭杰
 * @date: 2023年02月04日 1:05
 */
public class SortColors {
    public static final int BOUNDER = 1;
    public void sortColors(int[] nums) {
        if(nums.length == 1){
            return;
        }
        int n = nums.length;
        //荷兰国旗问题,双指针法
        int l = -1;int r = n;
        int i = 0;
        while(i<n){
            if(nums[i] > BOUNDER){
                //当遍历到的数是大于边界值的
                //将遍历到的数与边界的上一个数做交换,然后i不动
                swap(nums,r-1,i);
                r--;
            }else if(nums[i] < BOUNDER){
                //当遍历的数是小于边界值的
                //将遍历的到数与边界的下一个数做交换,然后i++
                swap(nums,l+1,i++);
                l++;
            }else{
                i++;
            }
        }
    }

    private void swap(int[] nums,int i,int j){
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }
    @Test
    public void test(){
        sortColors(new int[]{2,0,2,1,1,0});
    }
}

